package done.normal_001_100;

import org.junit.Test;

import static com.study.util.LogUtil.info;
import static java.lang.Math.abs;

/**
 * 16. 3Sum Closest 最接近的三数之和
 * <p>
 * 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数，
 * 使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
 * <p>
 * 例如，给定数组 nums = [-1, 2, 1, -4], 和 target = 1.
 * <p>
 * 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
 * <p>
 * 答案：
 * i   j->    <-k
 * |   |        |
 * [-1,  2,  1,  -4]
 * 2019-05-19 08:22
 **/
@SuppressWarnings("all")
public class ThreeSumClosest {

    public int threeSumClosest(int[] nums, int target) {
        // 190519 first
        return -1;
    }

    @Test
    public void test() {
        info("2 -> {}", threeSumClosest(new int[]{-1, 2, 1, -4}, 1));
    }
}


























/*
public int threeSumClosest(int[] nums, int target) {
    int len = nums.length;
    Arrays.sort(nums);
    int sum = nums[0] + nums[1] + nums[2];
    for (int i = 0; i < len-2; i++) {
        int j = i + 1;
        int k = len - 1;
        while (j < k) {
            int tmp = nums[i] + nums[j] + nums[k];
            sum = abs(tmp - target) < abs(sum - target)?tmp:sum;
            if (tmp == target)
                return tmp;
            else if (tmp > target)
                k--;
            else
                j++;
        }
    }
    return sum;
}
*/